package com.xian.d11_genericity_limit;

import java.util.ArrayList;

/**
 * 通配符:?
 * ?可以在“使用泛型”的时候代表一切类型。
 * ETKV是在定义泛型的时候使用的。
 * <p>
 * 泛型通配符:案例导学
 * 开发一个极品飞车的游戏，所有的汽车都能一起参与比赛。
 * <p>
 * 注意:
 * 虽然BMW和BENZ都继承了Car但是ArrayList<BMW>和ArrayList<BENZ>与ArrayList<Car>没有关系的! !
 *
 * 泛型的上下限:
 * ? extends Car: ?必须是Car或者其子类泛型上限
 * ? super Car : ?必须是Car或者其父类泛型下限
 */
public class GenericityDemo {
    public static void main(String[] args) {
        ArrayList<BMW> bwms = new ArrayList<>();
        bwms.add(new BMW());
        bwms.add(new BMW());
        bwms.add(new BMW());
        bwms.add(new BMW());
        go(bwms);


        ArrayList<BENZ> benzs = new ArrayList<>();
        benzs.add(new BENZ());
        benzs.add(new BENZ());
        benzs.add(new BENZ());
        benzs.add(new BENZ());
        go(benzs);

        ArrayList<Dog> dogs = new ArrayList<>();
        dogs.add(new Dog());
        dogs.add(new Dog());
        dogs.add(new Dog());
//        go(dogs);

    }

    /**
     * 所有车比赛
     *
     * @param cars
     */
    public static void go(ArrayList<? extends Car> cars) {

    }
}

class Dog {

}

class BENZ extends Car {

}

class BMW extends Car {

}

//父类
class Car {

}


